////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file camxflashdata.h
/// @brief Flash data
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef CAMXFLASHDATA_H
#define CAMXFLASHDATA_H

#include "camxcslsensordefs.h"
#include "camxdefs.h"
#include "camxflashdriver.h"
#include "camxhal3defs.h"
#include "camxsensorproperty.h"
#include "camxtypes.h"

CAMX_NAMESPACE_BEGIN

struct  HwSensorInfo;
struct  HwDeviceTypeInfo;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Class containing flash APIs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class FlashData
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FlashData
    ///
    /// @brief  Constructor
    ///
    /// @param  pFlashDriverData       Pointer to the flash driver data for this instance
    /// @param  pSensorInfoTable       slot of the Flash obtained through enumerate devices.
    /// @param  pDeviceInfo            device info containing device indicies of CSLDeviceTypeFlash
    ///
    /// @return None
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    explicit FlashData(
        FlashDriverData*        pFlashDriverData,
        HwSensorInfo*           pSensorInfoTable,
        const HwDeviceTypeInfo* pDeviceInfo);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ~FlashData
    ///
    /// @brief  Destructor
    ///
    /// @return None
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ~FlashData();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetDeviceIndex
    ///
    /// @brief  Get the flash device index
    ///
    /// @return device index
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 GetDeviceIndex()
    {
        return m_hFlashDeviceIndex;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// CreateInitializeCmd
    ///
    /// @brief  Construct the flash init command
    ///
    /// @param  pInitCmd   Initialize command to fill in
    ///
    /// @return None
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    VOID CreateInitializeCmd(
        CSLFlashInfoCmd* pInitCmd);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetNumberOfFlashs
    ///
    /// @brief  Get the number of Flashs
    ///
    /// @return Number of LEDs
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT16 GetNumberOfFlashs()
    {
        return m_pFlashDriverData->numberOfFlashs;
    }

private:
    FlashData(const FlashData&) = delete;               ///< Disallow the copy constructor
    FlashData& operator=(const FlashData&) = delete;    ///< Disallow assignment operator

    FlashDriverData* m_pFlashDriverData;                ///< Flash driver data
    INT32            m_hFlashDeviceIndex;               ///< Flash device handle
};

CAMX_NAMESPACE_END

#endif // CAMXFLASHDATA_H
